
#ifndef RANGE_CUSTOM_TILING_H
#define RANGE_CUSTOM_TILING_H

#include "register/tilingdata_base.h"

namespace optiling {
BEGIN_TILING_DATA_DEF(RangeCustomTilingData)
    TILING_DATA_FIELD_DEF(uint32_t, totalLength);         // 原始有效元素数
    TILING_DATA_FIELD_DEF(uint32_t, dataTypeStart);       // 输入start类型标识
    TILING_DATA_FIELD_DEF(uint32_t, dataTypeEnd);         // 输入End类型标识
    TILING_DATA_FIELD_DEF(uint32_t, dataTypeStep);        // 输入Step类型标识
    TILING_DATA_FIELD_DEF(uint32_t, totalLengthAligned);  // 32B对齐后的总元素数

    TILING_DATA_FIELD_DEF(uint32_t, blockLength);         // 每个核心处理的float总元素数
    TILING_DATA_FIELD_DEF(uint32_t, tileNum);             // 每个核心的Tile总数
    TILING_DATA_FIELD_DEF(uint32_t, tileLength);          // 普通Tile的float元素数
    TILING_DATA_FIELD_DEF(uint32_t, lastTileLength);      // 最后一个Tile的有效float元素数

    TILING_DATA_FIELD_DEF(uint32_t, formerNum);           // 多处理1个32B块的核心数
    TILING_DATA_FIELD_DEF(uint32_t, formerLength);        // 前formerNum个核心的float处理长度
    TILING_DATA_FIELD_DEF(uint32_t, formerTileNum);       // 前formerNum个核心的Tile总数
    TILING_DATA_FIELD_DEF(uint32_t, formerTileLength);    // 前formerNum个核心的普通Tile长度
    TILING_DATA_FIELD_DEF(uint32_t, formerLastTileLength);// 前formerNum个核心的最后一个Tile长度
    TILING_DATA_FIELD_DEF(uint32_t, tailNum);             // 正常处理的核心数
    TILING_DATA_FIELD_DEF(uint32_t, tailLength);          // 后tailNum个核心的float处理长度
    TILING_DATA_FIELD_DEF(uint32_t, tailTileNum);         // 后tailNum个核心的Tile总数
    TILING_DATA_FIELD_DEF(uint32_t, tailTileLength);      // 后tailNum个核心的普通Tile长度
    TILING_DATA_FIELD_DEF(uint32_t, tailLastTileLength);  // 后tailNum个核心的最后一个Tile长度

    TILING_DATA_FIELD_DEF(uint32_t, isEvenCore);          // 1=均分，0=非均分
END_TILING_DATA_DEF;

REGISTER_TILING_DATA_CLASS(RangeCustom, RangeCustomTilingData)
}
#endif // RANGE_CUSTOM_TILING_H
